/*
* Scanner扫描器
* templateStr: '的企鹅企鹅还有活{{thing}}'
* 指针扫描参数前面的字符  Such as => 的企鹅企鹅还有活
* 指针扫描参数  Such as => thing
* */
export default class Scanner{
    constructor(templateStr) {
        this.templateStr = templateStr
        // 定义单指针
        this.pos = 0
        // 收集指针从扫描到停止剩下的部分 (起始指针还没开始走)
        this.tail = templateStr
    }

    //路过指定内容  => {{ }}
    scan(tag){
        if (this.tail.indexOf(tag)==0){
            //控制指针后移 tag 位 ( 例如 '{{' 长度为2 )
            this.pos +=tag.length
            //改变 收集指针从扫描到停止剩下的部分
            this.tail = this.templateStr.substring(this.pos)
        }
    }

    //指针扫描参数前面的字符，并返回扫描到的值
    // stopTag => {{ (括号)
    scanUtil(stopTag){
        //收集 指针走过的值
        let pos_backup = this.pos
        while (this.tail.indexOf(stopTag)!=0 && !this.eos()){
            // 指针停止次数（指针走了几次。）
            this.pos ++;
            //指针走 pos 次后 停止剩下的部分
            this.tail = this.templateStr.substring(this.pos)
        }
        return this.templateStr.substring(pos_backup,this.pos)
    }

    //指针是否到头
    eos(){
        return this.pos >= this.templateStr.length
    }

}